/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formularze;

import bazy.HibernateUtil;
import bazy.Oferty;
import bazy.Przetargi;
import bazy.SpecyfikacjaZamowienia;
import bazy.Zalaczniki;
import bazy.Zamowienia;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import logowanie.LogBean;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Grzesiek
 */
@Named(value = "zam_wewBean")
@SessionScoped
public class Zam_wewBean implements Serializable {

    FacesContext context = FacesContext.getCurrentInstance();
    LogBean bean = (LogBean) context.getApplication().evaluateExpressionGet(context, "#{logBean}", LogBean.class);
    private String Dostawca;
    private boolean nowy = true;
    private boolean oknoPrzypisania = true;
    private int id_zam = 0;
    private ArrayList<SpecyfikacjaZamowienia> specList = new ArrayList<SpecyfikacjaZamowienia>();
    private ArrayList<Zalaczniki> zalacznikiList = new ArrayList<Zalaczniki>();
    private ArrayList<Oferty> ofertyList = new ArrayList<Oferty>();
    private int kwal_zakup;
    private String zrodlo;
    private String nr_zlec;
    private float suma;
    private String komentarz;
    private String uwagi;
    private Session session;
    private Zam_wew zw = null;
    private List<Przetargi> lista_przetargow = null;                            // 18
    private String message;
    private SelectItem[] dostepne_przetargi;
    private Formularz form = null;
    private int zmienna_przetargu = 0;

    public String getDostawca() {
        return Dostawca;
    }

    public String getNr_zlec() {
        return nr_zlec;
    }

    public String getUwagi() {
        return uwagi;
    }

    public void setUwagi(String uwagi) {
        this.uwagi = uwagi;
    }

    public void setNr_zlec(String nr_zlec) {
        this.nr_zlec = nr_zlec;
    }

    public void setDostawca(String Dostawca) {
        this.Dostawca = Dostawca;
    }

    public int getId_zam() {
        return id_zam;
    }

    public void setId_zam(int id_zam) {
        this.id_zam = id_zam;
    }

    public String getKomentarz() {
        return komentarz;
    }

    public void setKomentarz(String komentarz) {
        this.komentarz = komentarz;
    }

    public int getKwal_zakup() {
        return kwal_zakup;
    }

    public void setKwal_zakup(int kwal_zakup) {
        this.kwal_zakup = kwal_zakup;
    }

    public boolean isNowy() {
        return nowy;
    }

    public void setNowy(boolean nowy) {
        this.nowy = nowy;
    }

    public ArrayList<SpecyfikacjaZamowienia> getSpecList() {
        return specList;
    }

    public void setSpecList(ArrayList<SpecyfikacjaZamowienia> specList) {
        this.specList = specList;
    }

    public ArrayList<Oferty> getOfertyList() {
        return ofertyList;
    }

    public void setOfertyList(ArrayList<Oferty> ofertyList) {
        this.ofertyList = ofertyList;
    }

    public float getSuma() {
        suma = 0;
        for (int i = 0; i < specList.size(); i++) {
            suma += specList.get(i).getKwota() * specList.get(i).getIlosc();
        }

        return suma;
    }

    public void setSuma(float suma) {
        this.suma = suma;
    }

    public ArrayList<Zalaczniki> getZalacznikiList() {
        return zalacznikiList;
    }

    public void setZalacznikiList(ArrayList<Zalaczniki> zalacznikiList) {
        this.zalacznikiList = zalacznikiList;
    }

    public boolean saZalaczniki() {
        if (zalacznikiList.isEmpty()) {
            return false;
        } else {
            return true;
        }
    }

    public boolean saOferty() {
        if (ofertyList.isEmpty()) {
            return false;
        } else {
            return true;
        }
    }

    public String getZrodlo() {
        return zrodlo;
    }

    public void setZrodlo(String zrodlo) {
        this.zrodlo = zrodlo;
    }

    public void uzupelnij_dane(Zamowienia zam) {
        this.komentarz = zam.getKomentarz();
        this.Dostawca = zam.getZapotrzebowanies().iterator().next().getDostawca();
        this.suma = zam.getZapotrzebowanies().iterator().next().getKosztBrutto();
        this.uwagi = zam.getUwagidorealizacji();
        this.zrodlo = zam.getZrodlofinansowania();
        if (!zrodlo.equals("dydaktyka")) {
            nr_zlec = zrodlo;
            zrodlo = "nr_zlecenia";
        }
        this.kwal_zakup = zam.getZapotrzebowanies().iterator().next().getKwalifikacjaZakupu();
        specList.clear();
        Iterator<SpecyfikacjaZamowienia> spec_iter = zam.getZapotrzebowanies().iterator().next().getSpecyfikacjaZamowienias().iterator();
        while (spec_iter.hasNext()) {
            specList.add(spec_iter.next());

        }
        zalacznikiList.clear();
        Iterator<Zalaczniki> zalacz_iter = zam.getZalacznikis().iterator();
        while (zalacz_iter.hasNext()) {
            zalacznikiList.add(zalacz_iter.next());

        }
        ofertyList.clear();
        Iterator<Oferty> oferty_iter = zam.getOferties().iterator();
        while (oferty_iter.hasNext()) {
            ofertyList.add(oferty_iter.next());

        }



        wczytaj_listy();
        session.close();
    }

    public void wyczysc_dane() {
        this.komentarz = "";
        this.Dostawca = "";
        this.suma = 0;
        this.uwagi = "";
        this.kwal_zakup = 1;
        this.zrodlo = "dydaktyka";
        this.nr_zlec = "";
        this.id_zam = 0;
        specList.clear();
        zalacznikiList.clear();
        ofertyList.clear();
        specList.add(new SpecyfikacjaZamowienia(null, "", "", 0, new Float(0)));
        zalacznikiList.add(new Zalaczniki(null, "", "", "", false, null));
        ofertyList.add(new Oferty(null, "", new Float(0), ""));

    }

    public void usun_spec(SpecyfikacjaZamowienia sz) {
        if (sz.getIdspecyfikacjaZamowienia() != null) {
            zw.usun_spec(sz);
        }
        specList.remove(sz);
    }

    public void usun_oferte(Oferty of) {
        if (of.getIdoferty() != null) {
            zw.usun_oferte(of);
        }
        ofertyList.remove(of);
    }

    public void usun_zalacznik(Zalaczniki zal) {
        if (zal.getIdzalaczniki() != null) {
            zw.usun_zalacznik(zal);

        }
        zalacznikiList.remove(zal);
    }

    public void dodaj_spec() {
        specList.add(new SpecyfikacjaZamowienia(null, "", "", 0, new Float(0)));

    }

    public void dodaj_zalacznik() {
        zalacznikiList.add(new Zalaczniki(null, "", "", "", false, null));

    }

    public void dodaj_oferte() {
        ofertyList.add(new Oferty(null, "", new Float(0), ""));

    }

    public Zam_wewBean() {
        zw = new Zam_wew();
    }

    public void inicjalizuj(ComponentSystemEvent event) {
        if (bean == null) {
            context = FacesContext.getCurrentInstance();
            ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
            handler.performNavigation("brak_dostepu");
        }
        boolean isGET = ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getMethod().equals("GET") ? true : false;
        if (isGET) {
            if (id_zam == 0) {
                wyczysc_dane();
            } else {
                session = HibernateUtil.getSessionFactory().openSession();
                Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id_zam);
                if ((nowy && zam.getStatusy().getIdstatusy() != 1) || (!zam.getUzytkownicy().getLogin().equals(bean.getLogin()) && bean.getUprawnienia().equals("petent"))) {
                    context = FacesContext.getCurrentInstance();
                    ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
                    handler.performNavigation("brak_dostepu");
                }
                uzupelnij_dane(zam);
            }
        }

    }

    public String zapisz_zam() {
        if (!zrodlo.equals("dydaktyka")) {
            zrodlo = nr_zlec;
        }
        zw.dodaj(id_zam, bean.getId_uz(), komentarz, zrodlo, uwagi, suma, kwal_zakup, Dostawca, specList, zalacznikiList, ofertyList);
        return "success";
    }

    public boolean pokaz_przetarg() {
        this.session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id_zam);
        if (zam.getPrzetargis().isEmpty()) {
            session.getTransaction().commit();
            session.close();
            return true;
        }
        session.getTransaction().commit();
        session.close();
        return false;
    }

    public String przypisz_p(int id) {
        if (zmienna_przetargu == 0) {
            message = "BŁĄD, NIE WYBRANO PRZETARGU";
            return "wracaj";
        }
        this.session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id);
        Przetargi do_edycji = (Przetargi) session.load(Przetargi.class, zmienna_przetargu);
        Set<Zamowienia> trampek = do_edycji.getZamowienias();
        trampek.add(zam);
        do_edycji.setZamowienias(trampek);
        session.update(do_edycji);
        session.getTransaction().commit();
        session.close();
        form = new Zgl_aw();
        form.zmien_status(zam.getIdzamowienia(), 15, bean.getId_uz());
        message = "ZADANIE ZOSTALO WYKONANE POPRAWNIE";
        return "wracaj";

    }

    /**
     * @return the zmienna_przetargu
     */
    public int getZmienna_przetargu() {
        return zmienna_przetargu;
    }

    /**
     * @param zmienna_przetargu the zmienna_przetargu to set
     */
    public void setZmienna_przetargu(int zmienna_przetargu) {
        this.zmienna_przetargu = zmienna_przetargu;
    }

    public void wczytaj_listy() {
        session = HibernateUtil.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();

        Query query = session.createQuery("from Przetargi p where p.dataPrzetargu >= current_date()");
        lista_przetargow = (List<Przetargi>) query.list();
        setDostepne_przetargi(new SelectItem[lista_przetargow.size() + 1]);
        getDostepne_przetargi()[0] = new SelectItem(0, "-wybierz przetarg");

        tx.commit();
        for (int i = 0; i < lista_przetargow.size(); i++) {
            getDostepne_przetargi()[i + 1] = new SelectItem(lista_przetargow.get(i).getIdprzetargi(), (lista_przetargow.get(i).getNazwa() + " " + lista_przetargow.get(i).getDataPrzetargu().toString().substring(0, 10)));

        }
    }

    public SelectItem[] getDostepne_przetargi() {
        //  wczytaj_listy();
        return dostepne_przetargi;
    }

    /**
     * @param dostepne_przetargi the dostepne_przetargi to set
     */
    public void setDostepne_przetargi(SelectItem[] dostepne_przetargi) {
        this.dostepne_przetargi = dostepne_przetargi;
    }

    /**
     * @return the oknoPrzypisania
     */
    public boolean isOknoPrzypisania() {
        return oknoPrzypisania;
    }

    /**
     * @param oknoPrzypisania the oknoPrzypisania to set
     */
    public void setOknoPrzypisania(boolean oknoPrzypisania) {
        this.oknoPrzypisania = oknoPrzypisania;
    }
}
